#include "Queue.h"

int Queinit(Queue_t** que){
    *que=(Queue_t*)calloc(1,sizeof(Queue_t));
    (*que)->front=NULL;
    (*que)->tail=NULL;
    (*que)->size=0;
    return 1;
}

void Queprint(Queue_t* que){
    Node_t* tmp=que->front;
    for(int i=0; i<que->size; i++){
        printf("%d ",tmp->data);
        tmp=tmp->next;
    }
    printf("\n");
}

//队列 头出
int Quepop(Queue_t* que){
    if(que->size==0) {
        printf("队列为空\n");
        return -1;
    }
    Node_t* tmp=que->front;

    // if(que->size==1){
    //     que->tail=NULL;    //不建议这样搞花活，代码可读性差，且隐式赋值容易出现野指针
    // }                
    // que->front=que->front->next;

    if(que->size==1){
        que->tail=NULL;
        que->front=NULL;
    } else {
        que->front=que->front->next;
    }
    int ans=tmp->data;
    free(tmp);
    --que->size;
    return ans;
}

//队列 尾入
int Quepush(Queue_t* que,int data){
    Node_t *node=(Node_t *) calloc(1,sizeof(Node_t));
    node->data=data;
    if(que->size==0){
        que->front=node;
        que->tail=node;
    }else{
        que->tail->next=node;
        que->tail=node;
    }
    ++que->size;
    return 1;
}